#include <stdio.h>
#include <stdlib.h>
#include "cliente.h"
#include "documento.h"
#include "encomenda.h"
#include "fornecedor.h"
#include "funcionario.h"
#include "mercadoria.h"
#include "projeto.h"
#include "lista de encomendas.h"
#include "lista de pagamentos.h"

//Função para abrir/fechar arquivos
FILE* manipularArquivo(string acao){
    FILE* arquivo;

    switch(acao){
    case "leitura":
        arquivo=fopen(arquivo.txt, "r+");
        break;
    case "gravacao":
        arquivo=fopen(arquivo.txt, "w+");
        break;
    case "fechar":
        arquivo=fclose(arquivo.txt);
        break;
    default:
        break;
    }
    return arquivo;
}

//Função para verificar fim do arquivo
int verificarFinalArq(FILE * arquivo){
	int i=fgetc(arquivo);
	if (i==EOF){
		return 0;
	}else{
		return 1;
	}
}

//FUNÇÕES DE ARMAZENAMENTO DE DADOS
//Função para  armazenar os dados da LISTA DE CLIENTES no ARQUIVO "cliente.txt"
int armazenarDadosCliente(Cliente ** listaCli){
    Cliente* auxCli;
    FILE* arquivo = manipularArquivo("gravacao");
    if(arquivo!=NULL){
        for(auxCli=*listaCli;auxCli->prox!=NULL;auxCli=auxCli->prox){
            fprintf(arquivo,"%d;%s;%s;%s;%s;%s;%s;%s;%s;%d\n",auxCli->codigo,auxCli->nome_cli,auxCli->rua_cli,
                    auxCli->bairro_cli,auxCli->cidade_cli,auxCli->cpf_cli,auxCli->data_nasc,
                    auxCli->telefone,auxCli->email,auxCli->status);
        }
        manipularArquivo("fechar");
        return 1;
    }else{
        return 0;
    }
}

//Função para  armazenar os dados da LISTA DE FORNECEDOR no ARQUIVO "fornecedor.txt"
int armazenarDadosFornecedor(Fornecedor ** listaForn){
    Fornecedor* auxForn;
    FILE* arquivo = manipularArquivo("gravacao");
    if(arquivo!=NULL){
        for(auxForn=*listaCli;auxForn->prox!=NULL;auxForn=auxForn->prox){
            fprintf(arquivo,"%d;%s;%s;%s;%s;%s;%s;%s;%s;%d\n",auxForn->codigo,auxForn->nome_fant_forn,
                    auxForn->nome_fant_forn,auxForn->rua_forn,auxForn->bairro_forn,auxForn->cidade_forn,
                    auxForn->cnpj_forn,auxForn->telefone,auxForn->email, auxForn->status);
        }
        manipularArquivo("fechar");
        return 1;
    }else{
        return 0;
    }
}

//Função para  armazenar os dados da LISTA DE FUNCIONARIO no ARQUIVO "funcionario.txt"
int armazenarDadosFuncionario( Funcionario ** listaFunc)
{


}

//Função para  armazenar os dados da LISTA DE MERCADORIAS no ARQUIVO "mercadoria.txt"
int armazenarDadosMercadoria( Mercadoria ** listaMerc){

}

//Função para  armazenar os dados da LISTA DE PAGAMENTO no ARQUIVO "<mes>_pagamento.txt"
int armazenarDadosPagamento(Pagamento  ** listaPagamento){

}

//Função para  armazenar os dados da LISTA DE COMPRA no ARQUIVO "compras.txt"
int armazenarDadosCompra( Compra ** listaCompra){

}

//Função para  armazenar os dados da LISTA DE ENCOMENDAS no ARQUIVO "encomendas.txt"
int armazenarDadosEncomenta( Encomenda ** listaEncomenda){

}

//Função para  armazenar os dados da LISTA DE PROJETOS no ARQUIVO "projetos.txt"
int armazenarDadosProjeto( Projeto ** listaProjeto){

}

//Função para  armazenar os dados da LISTA DE DOC ACESSÓRIOS no ARQUIVO "doc_acessorios.txt"
int armazenarDadosDocAcessorio( Documento ** listaDocAcessorio){

}



//FUNÇÕES DE CARREGAMENTO DE DADOS
//Função para  carrregar os dados do ARQUIVO "cliente.txt" para LISTA DE CLIENTES
int carregarDadosCliente( Cliente ** listaCli)
{   int max;
    FILE* arquivo = manipularArquivo("leitura");
    while(!feof(arquivo))
    {
        if(getc(arquivo) == '\n' )
        max++;
    }
    rewind(arquivo);
    if(arquivo!=NULL)
    {
        while(i!=max)
        {
            Cliente* auxCli = (Cliente*)malloc(sizeof(Cliente));
            fscanf(arquivo,"%d;%s;%s;%s;%s;%s;%s;%s;%s;%d\n",auxCli->codigo,auxCli->nome_cli,auxCli->rua_cli,auxCli->bairro_cli,auxCli->cidade_cli,auxCli->cpf_cli,auxCli->data_nasc,auxCli->telefone,auxCli->email,auxCli->status);
            i++;

            cadastrar_cliente(listaCli, auxCli->codigo);
        }

        manipularArquivo("fechar");

        return 1;
    }else{
        return 0;
    }
}

//Função para  carregar os dados do ARQUIVO "fornecedor.txt" para LISTA DE FORNECEDOR
int carregarDadosFornecedor( Fornecedor ** listaForn){

    int max;
    FILE* arquivo = manipularArquivo("leitura");
    while(!feof(arquivo))
    {
        if(getc(arquivo) == '\n' )
        max++;
    }
    rewind(arquivo);
    if(arquivo!=NULL)
    {
        while(i!=max)
        {
            Fornecedor* auxForn = (Fornecedor*)malloc(sizeof(Fornecedor));
            fscanf(arquivo,"%d;%s;%s;%s;%s;%s;%s;%s;%s;%d\n",auxForn->codigo,auxForn->nome_forn,auxForn->rua_forn,
                   auxForn->bairro_forn,auxForn->cidade_forn,auxForn->cnpj_forn,auxForn->telefone,auxForn->email,
                   auxForn->status,auxForn->nome_fant_forn);
            i++;

            cadastrar_fornecedor(listaForn, auxForn->codigo);
        }

        manipularArquivo("fechar");

        return 1;
    }else{
        return 0;
    }
}

//Função para  carregar os dados do ARQUIVO "funcionario.txt" para LISTA DE FUNCIONARIO
int carregarDadosFuncionario( Funcionario ** listaFunc)
{
    int max;
    FILE* arquivo = manipularArquivo("leitura");
    while(!feof(arquivo))
    {
        if(getc(arquivo) == '\n' )
        max++;
    }
    rewind(arquivo);
    if(arquivo!=NULL)
    {
        while(i!=max)
        {
            Funcionario* auxFunc = (Funcionario*)malloc(sizeof(Funcionario));
            fscanf(arquivo,"%d;%s;%s;%s;%s;%s;%s;%s;%s;%d\n",auxFunc->codigo,auxFunc->nome_func,auxFunc->rua_func,
                   auxFunc->bairro_func,auxFunc->cidade_func,auxFunc->cpf_func,
                   auxFunc->data_nasc,auxFunc->telefone,auxFunc->login,auxFunc->status,auxFunc->profissao,
                   auxFunc->salario,auxFunc->senha,auxFunc->perfil_func);
            i++;

            cadastrar_funcionario(Funcionario, auxFunc->codigo);
        }

        manipularArquivo("fechar");

        return 1;
    }else{
        return 0;
    }
}

//Função para  carregar os dados do ARQUIVO "mercadoria.txt" para LISTA DE MERCADORIAS
int carregarDadosMercadoria( Mercadoria ** listaMerc){

}

//Função para  carregar os dados do ARQUIVO "<mes>_pagamento.txt" para LISTA DE PAGAMENTO
int carregarDadosPagamento(Pagamento  ** listaPagamento){

}

//Função para  carregar os dados do ARQUIVO "compras.txt" para LISTA DE COMPRA
int carregarDadosCompra( Compra ** listaCompra){

}

//Função para  carregar os dados do ARQUIVO "encomendas.txt" para LISTA DE ENCOMENDAS
int carregarDadosEncomenta( Encomenda ** listaEncomenda){

}

//Função para  carregar os dados do ARQUIVO "projetos.txt" para LISTA DE PROJETOS
int carregarDadosProjeto( Projeto ** listaProjeto){

}

//Função para  carregar os dados do ARQUIVO "doc_acessorios.txt" para LISTA DE DOC ACESSÓRIOS
int carregarDadosDocAcessorio( Documento ** listaDocAcessorio){

}

